#include "myTask.h"
#include "myUart.h"
#include "cmsis_os.h"
#include "myDevice.h"

void task_led_work(void)
{
	HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}

void task_output(void const * argument)
{

  for(;;)
  {
    uart_receive();
    osDelay(1);
  }

}
bool flag_send_NRF = 0;
u8 buf_send_NRF[100] = {0x00};
u8 len_send_NRF;
u8 CS_buf[33]; // 接收缓冲区
void NRF24L01_Task(void const * argument)
{
  /* USER CODE BEGIN NRF24L01_Task */
  /* Infinite loop */
  for (;;)
	{
		if (NRF24L01_RxPacket(CS_buf) == 0)
		{
			uartData_depart(CS_buf, sizeof(CS_buf));
			memset(&CS_buf, 0, sizeof(CS_buf));
		}
		if (flag_send_NRF)
		{
			flag_send_NRF = 0;
			// 发送模式
			NRF24L01_TX_Mode();

			NRF_send(0x6001, buf_send_NRF, len_send_NRF);
			osDelay(1);
			// 立即切换回接收模式
			NRF24L01_RX_Mode();
		}
		osDelay(1);
	}
  /* USER CODE END NRF24L01_Task */
}

u16 cnt_heart = 0;
u16 Heartbeat_interval = 1000;//心跳时间间隔(单位ms)
/* 心跳 */
void task_Heartbeat(void)
{
	if(!Heartbeat_interval)
		return;
	cnt_heart++;
	if(cnt_heart >= Heartbeat_interval)
	{
		uart_send(&huart1,0x4001,NULL,0);
		cnt_heart = 0;
	}
}



static TASK_COMPONENTS Task_Comps[] =
	{
		// 状态  计数  周期  函数
		{0, 500, 500, task_led_work}, // 芯片运行指示灯
		
		{0, 100, 100,task_led},
		{0, 1, 1, task_Heartbeat},
		/* Add new task here */
};

uint8_t Tasks_Max = sizeof(Task_Comps) / sizeof(Task_Comps[0]);

//========================================================================
// 函数: Task_Handler_Callback
// 描述: 任务标记回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Marks_Handler_Callback(void)
{
	uint8_t i;
	for (i = 0; i < Tasks_Max; i++)
	{
		if (Task_Comps[i].TIMCount) /* If the time is not 0 */
		{
			Task_Comps[i].TIMCount--;		 /* Time counter decrement */
			if (Task_Comps[i].TIMCount == 0) /* If time arrives */
			{
				/*Resume the timer value and try again */
				Task_Comps[i].TIMCount = Task_Comps[i].TRITime;
				Task_Comps[i].Run = 1; /* The task can be run */
			}
		}
	}
}

//========================================================================
// 函数: Task_Pro_Handler_Callback
// 描述: 任务处理回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Pro_Handler_Callback(void)
{
	uint8_t i;
	for (i = 0; i < Tasks_Max; i++)
	{
		if (Task_Comps[i].Run) /* If task can be run */
		{
			Task_Comps[i].Run = 0;	  /* Flag clear 0 */
			Task_Comps[i].TaskHook(); /* Run task */
		}
	}
}
